﻿using BLevy.Entidad;
using BLevy.Negocio;
using Microsoft.Reporting.WinForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmImprimirCupones : Form
    {
        public frmImprimirCupones()
        {
            InitializeComponent();
        }

        private void frmImprimirCupones_Load(object sender, EventArgs e)
        {
            try
            {
                var query = (from row in Cupones.FindAllDetalles()
                             join cupon in Negocio.Cupones.FindAll() on row.cupon_id equals cupon.id
                             join periodo_socio in PeriodosSocios.FindAll() on row.periodosocio_id equals periodo_socio.id
                             join periodo in Periodos.FindAll() on periodo_socio.periodo_id equals periodo.id
                             join socio in Negocio.Socios.FindAll() on cupon.socio_id equals socio.id
                             join localidad in Localidades.FindAll() on socio.localidad_id equals localidad.id
                             join zona in Negocio.Zonas.FindAll() on socio.zona_id equals zona.id
                             select new
                             {
                                 CUPON_ID = cupon.id,
                                 NUMERO = cupon.numero,
                                 ID = socio.id,
                                 APELLIDO = socio.apellido,
                                 NOMBRES = socio.nombres,
                                 DIRECCION = socio.direccion,
                                 LOCALIDAD = localidad.localidad,
                                 ZONA = zona.zona,
                                 VENCIMIENTO_1 = periodo.vencimiento_1,
                                 VENCIMIENTO_2 = periodo.vencimiento_2,
                                 IMPORTE = periodo_socio.importe,
                                 VENCIMIENTO = (periodo_socio.importe + periodo.recargo),
                                 OBSERVACIONES = socio.observaciones

                             }).ToList();

                ReportDataSource rds = new ReportDataSource();
                rds = new ReportDataSource("DataSet1", query);

                this.reportViewer1.LocalReport.ReportEmbeddedResource = "BLevy.UI.Reportes.CuponReporte.rdlc";
                this.reportViewer1.LocalReport.DataSources.Add(rds);
                //this.reportViewer1.ZoomMode = Microsoft.Reporting.WinForms.ZoomMode.PageWidth; 

                this.reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(SubReportGetAdherentes);

                //this.reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(SubReportGetPeriodos);

                this.reportViewer1.RefreshReport();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


        void SubReportGetPeriodos(object sender, SubreportProcessingEventArgs e)
        {
            try
            {
                int cupon_id = int.Parse(e.Parameters["CUPON_ID"].Values[0].ToString());
                ReportDataSource rds = new ReportDataSource("DataSet1", GetPeriodosPorIdCupon(cupon_id));
                e.DataSources.Add(rds);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        void SubReportGetAdherentes(object sender, SubreportProcessingEventArgs e)
        {
            try
            {
                switch (e.ReportPath)
                {
                    case "AdherentesReporte":
                        int socio_id = int.Parse(e.Parameters["SOCIO_ID"].Values[0].ToString());
                        ReportDataSource rds = new ReportDataSource("adherentes", GetAdherentesPorSocioId(socio_id));
                        e.DataSources.Add(rds);
                        break;
                    //case "PeriodosPorCuponReporte":
                    //    int cupon_id = int.Parse(e.Parameters["CUPON_ID"].Values[0].ToString());
                    //    ReportDataSource rds2 = new ReportDataSource("DataSet1", GetPeriodosPorIdCupon(cupon_id));
                    //    e.DataSources.Add(rds2);
                    //    break;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private IList<Adherente> GetAdherentesPorSocioId(int socio_id)
        {
            IList<Adherente> adherentesL = null;

            try
            {
                adherentesL = Adherentes.FindByIdSocio(socio_id);
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return adherentesL;
        }

        private IList<Periodo> GetPeriodosPorIdCupon(int cupon_id)
        {
            IList<Periodo> periodosL = null;

            try
            {
                periodosL = Periodos.GetPeriodosByIdCupon(cupon_id);
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return periodosL;
        }


    }
}
